An encoder converts an active input signal into a binary code representation.
A priority encoder assigns priority to the highest-order input if multiple inputs are active at the same time.
Example: 8-bit Priority Encoder
Input
Output
1XXX_XXXX
( 111 ) 2
01XX_XXXX
( 110 ) 2
0000_0001
( 000 ) 2
0000_0000
Valid = 0
K-Maps for 4-Bit Priority Encoder
Dout[0]
Din[3][2][1][0]
00
01
11
10
00
X
0
1
1
01
0
0
0
0
11
1
1
1
1
10
1
1
1
1
Simplified Expression :
D out [ 0 ] = D in [ 3 ] + D in [ 2 ] ′ D in [ 1 ]
Valid = | D in
Dout[1]
Din[3][2][1][0]
00
01
11
10
00
X
0
0
0
01
1
1
1
1
11
1
1
1
1
10
1
1
1
1
Simplified Expression :
D out [ 1 ] = D in [ 2 ] + D in [ 3 ]
Valid = | D in
Verilog Implementation
module PENC4(Din, Dout, Valid);
input [3:0] Din;
output [1:0] Dout;
output valid;
assign Dout[0] = Din[3] | ((!Din[2]) & Din[1]);
assign Dout[1] = Din[2] | Din[3];
assign Valid = |Din; // reduction OR on Din
endmodule